// const noReturn = (): void => { // void 定义没有返回值的函数
//     console.log(123);
// }
// noReturn()

// let a: number = 10
// a = 'str' //声明了number类型的变量不能赋值字符串
// console.log(a);

// let arr1:number[] = [1,2,3,'str'] //最后一个元素 str 不能赋值给number类型的数组
// let arr2:Array<number> = [1,2,3] //泛型表示

// // 元组类型
// let x: [string, number] = ['str', 123]

// // enum类型
// enum Color {red, green=2, blue} //此时0号元素是red，1号元素是undefine，2号元素是green，3号元素是blue
// let c:Color = Color.red
// let cname = Color[1]
// console.log(c, cname);

// // unknown类型
// let notSure: unknown = 'abc'
// notSure = 123
// notSure = true
// notSure = [1, 2, 3]
// console.log(notSure);

// // any类型 
// let sth: any = 'abc'
// sth = 123
// // let sthArr: any[] = [1, 2 ,3, 'abc', true]
// let sthArr: Array<any> = [1, 2 ,3, 'abc', true]
// console.log(sth);
// console.log(sthArr);

// // never类型
// let snever: never = 123 //不能将数字类型的值赋给never类型的变量
// const fnNever = ():never => { //只能赋值给总是抛出异常的函数
//     throw new Error('123')
// }

// // object 类型
// let o:object = [1, 2, 3]
// o = 123
// o = 'str'
// o = {a: 1}
// o = null
// o = undefined
// o = true
// o = Symbol(1)
// o = BigInt(123)
// console.log(o);

// // 类型断言
// let svalue: any = 'hello world'
// // let slen: number = (<string>svalue).length
// let slen:number = (svalue as string).length
// console.log(slen);

// // class private私有属性
// class Animal {
//     private name: string
//     constructor(theName: string) {
//         this.name = theName
//     }
//     public getName() {
//         console.log(this.name);
//     }
// }

// class Dog extends Animal {
//     constructor(name: string) {
//         super(name)
//     }
// }
// let animal = new Animal('cat')
// let dog = new Dog('dd')
// dog.name //私有属性无法使用
// dog.getName()

// class protected 受保护属性
// class Animal {
//     protected name: string
//     constructor(theName: string) {
//         this.name = theName
//     }
// }

// class Dog extends Animal {
//     constructor(name: string) {
//         super(name)
//     }
//     public getName() {
//         console.log(this.name);
//     }
// }
// let animal = new Animal('cat')
// let dog = new Dog('dd')
// dog.name //私有属性无法使用
// dog.getName()

// static 静态属性
// class Animal {
//     static str: string = 'str123'
//     getName() {
//         console.log(Animal.str);
//     }
// }
// let animal = new Animal()
// animal.getName()

// 可选参数与默认参数
// const buildName = (firstName: string, lastName: string = 'nice'): string => {
//     return firstName + '' + lastName
// }
// console.log(buildName('tom', 'smith'));
// console.log(buildName('tom'));

// 泛型
// const everyType = <T>(target: T): T => {
//     return target
// }
// console.log(everyType('str'));

// 接口
interface listType {
    // name?: string
    // readonly card: number
    // age?: number
    x?: 1|2|3
    [a: string]: any

}

const getObject = (obj: listType) => {
    console.log(obj.name);
    return obj
}

console.log(getObject({x:4}));

// console.log(getObject({name: 'abc', card: 111}));

// let sth = getObject({naame: 'tom', age: 18, card: 110})

// sth.card = 111 //只读属性
// sth.name = 'jerry'